【AWS】PHP製監視ツール Cacti (Cacti on EC2セットアップ編)
はじめに
こんにちは植木和樹です。以前「PHP製監視ツール Cacti (URL監視編)」というエントリでCactiを用いたURL監視の方法をご紹介しました。
順序が前後してしまいましたが、本日はEC2とRDSを用いたCactiのセットアップをご紹介したいと思います。
必要なもの
事前に下記のCactiサーバー用EC2インスタンスを作成しておきます。
- EC2(t1.micro, Amazon Linux)
- Cacti用セキュリティグループ ssh(tcp/22)、http(tcp/80)
- RDS用セキュリティグループ MySQL(tcp/3306)
RDS(MySQL)構築
MySQLでcactiデータベースを作成しておきます。RDSでは初期データベースのキャラクターセットがlatin1になりますので、初期DBは最初は作らないようにしています。
- Endpoint
- cacti.xxxxxxxxxx.ap-northeast-1.rds.amazonaws.com
- DB Engine
- MySQL(5.6.12)
- DB Name
- cacti(後から作ります)
- Username
- cactiuser
- Password
- cactiuser
- Parameter Group
- キャラクターセットとしてUTF8を有効にしています
Cactiのインストールと設定
ミドルウェア インストール
ローカルPCからchef-soloとberkshelfを使ってApache2.2とPHP5.3をインストールします。
$ knife solo init . $ vi Berksfile $ knife cookbook create cacti -o site-cookbooks $ vi site-cookbooks/cacti/recipes/default.rb $ vi roles/cacti_server.json $ knife solo bootstrap -i my_keypair.pem ec2-user@12.34.56.78 -o 'role[cacti_server]'
Berksfile
site :opscode cookbook "apache2" cookbook "php"
site-cookbooks/cacti/recipes/default.rb
package "cacti" do action :install notifies :restart, "service[httpd]" end service "httpd" do action :nothing end
roles/cacti_server.json
{ "name": "cacti_server", "default_attributes": {}, "json_class": "Chef::Role", "description": "This is a Role for setting up a cacti server", "chef_type": "role", "run_list": [ "recipe[apache2]", "recipe", "recipe[cacti]" ] }
以降の作業はCactiをインストールしたEC2にsshでログインして作業します。
Cacti設定ファイルの修正
Chefでインストールされた設定ファイルを少々修正します。本来ならテンプレートにしてChefで配布すべきなのでしょうが、説明が本筋と外れるので割愛します。
$ sudo yum install httpd24 cacti net-snmp-utils -y $ sudo vi /etc/httpd/conf.d/cacti.conf <IfModule mod_authz_core.c> # httpd 2.2 Order deny,allow Deny from all Allow from all (← localhost から all に変更) </IfModule> $ sudo vi /etc/cacti/db.php (RDSのエンドポイントに変更する) $database_hostname = "cacti.xxxxxxxxxx.ap-northeast-1.rds.amazonaws.com"; $ sudo chkconfig httpd on $ sudo service httpd restart
DB初期設定(MyISAM → InnoDBへの変換)
Cactiから公式に配布されている初期DB作成用SQLは、テーブル形式がMyISAM指定になっています。このままだとRDSから「Message : DB Instance cacti contains MyISAM tables that have not been migrated to InnoDB. These tables can impact your ability to perform point-in-time restores. Consider converting these tables to InnoDB.」と警告されます。MyISAMだとポイント・イン・タイム リストア機能が使えないということですね。
Cactiのフォーラムを読んでみたところ、特にMyISAM形式である必要はないようなのでInnoDBに変更してしまいましょう。
$ sudo sed -i.bak -e 's/MyISAM/InnoDB/' /usr/share/doc/cacti-0.8.8a/cacti.sql $ mysqladmin -u cactiuser -p -h cactidb.xxxxxxxx.ap-northeast-1.rds.amazonaws.com create cacti $ mysql -u cactiuser -p -h cactidb.xxxxxxxx.ap-northeast-1.rds.amazonaws.com cacti < /usr/share/doc/cacti-0.8.8a/cacti.sql
cronを有効にする
$ sudo vi /etc/cron.d/cacti */5 * * * * cacti /usr/bin/php /usr/share/cacti/poller.php > /dev/null 2>&1 (行頭のコメントを外します)
Cactiの設定
初期設定はブラウザから行うことができます。CactiサーバーのPublicDNSに対して http://cacti.example.com/cacti/ のようにアクセスすると設定画面が表示されます。
「New Install」を選びます。
Cactiが内部で使用するコマンドのパスを設定します。自動設定されるので、そのまま「Finish」をクリックします。
設定画完了するとログイン画面に移ります。Cacti管理者(admin)の初期パスワードは admin になっていますので、ログイン後に[Utilities]-[User Management]画面で変更してください。
Cactiは初期状態で自分自身(127.0.0.1)が監視対象になっていますので、cronによるデータ収集が何度か実行される10〜15分後にはグラフが表示されることも確認できるかと思います。
まとめ
Cactiのインストール記事自体はネットを検索すれば相当数でてきますので、インストールは簡単にできるかと思います。
Cactiで一番の難関はData Queriesを用いたデータ収集とGraph Template設定だと思っています。追々そのあたりをご紹介したいと思います。